{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.neural_network import MLPClassifier\n",
    "from sklearn.svm import SVC\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "from functools import partial\n",
    "from ipywidgets import interact\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot Decision Boundary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#--------  plot_decision_boundary\n",
    "# A function that visualizes the data and the decision boundaries\n",
    "# Input: \n",
    "#      x (predictors)\n",
    "#      y (labels)\n",
    "#      pred (classifier prediction function)\n",
    "#      title (title for plot)\n",
    "#      ax (a set of axes to plot on)\n",
    "# Returns: \n",
    "#      ax (axes with data and decision boundaries)\n",
    "\n",
    "def plot_decision_boundary(x, y, pred, title, ax):\n",
    "    # Create mesh\n",
    "    # Interval of points for biomarker 1\n",
    "    min0 = np.min(x[:,0])\n",
    "    max0 = np.max(x[:,0])\n",
    "    interval0 = np.arange(min0, max0, (max0-min0)/500.0)\n",
    "    n0 = np.size(interval0)\n",
    "    \n",
    "    # Interval of points for biomarker 2\n",
    "    min1 = np.min(x[:,1])\n",
    "    max1 = np.max(x[:,1])\n",
    "    interval1 = np.arange(min1, max1, (max1-min1)/500.0)\n",
    "    n1 = np.size(interval1)\n",
    "\n",
    "    # Create mesh grid of points\n",
    "    x1, x2 = np.meshgrid(interval0, interval1)\n",
    "    x1 = x1.reshape(-1,1)\n",
    "    x2 = x2.reshape(-1,1)\n",
    "    xx = np.concatenate((x1, x2), axis=1)\n",
    "\n",
    "    # Predict on mesh of points\n",
    "    yy = pred(xx)\n",
    "    yy = yy.reshape((n0, n1))\n",
    "\n",
    "    # Plot decision surface\n",
    "    x1 = x1.reshape(n0, n1)\n",
    "    x2 = x2.reshape(n0, n1)\n",
    "    ax.contourf(x1, x2, yy, cmap=plt.cm.coolwarm, alpha=0.8)\n",
    "    \n",
    "    if(y != None):\n",
    "        # Plot scatter plot of data\n",
    "        yy = y.reshape(-1,)\n",
    "        ax.scatter(x[yy==0,0], x[yy==0,1], c='red', cmap=plt.cm.coolwarm)\n",
    "        ax.scatter(x[yy==1,0], x[yy==1,1], c='blue', cmap=plt.cm.coolwarm)\n",
    "    \n",
    "    # Label axis, title\n",
    "    ax.set_title(title)\n",
    "    ax.set_xlabel('$x_1$')\n",
    "    ax.set_ylabel('$x_2$')\n",
    "    \n",
    "    return ax"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example: Learning XOR"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generate data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'$x_2$')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAETCAYAAAAh/OHhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFUhJREFUeJzt3X+MXeV95/H3x56BNnZCVmDU8iMY\nCGTjzWbXaMSym7oJyi+blWzSRRFIpqUieFOWbgpWJdqmaUWltpssS9QK2gJNSbASQr0bYkVQspuS\nhqQhZcAbNpC11jYhGKfL1MmiYgiM7e/+cS9hGI/te+wz98zY75c0mnvOeXyf7zMzns8852eqCkmS\nBrWg6wIkSfOLwSFJasTgkCQ1YnBIkhoxOCRJjRgckqRGDA5JUiMGhySpEYNDktTISNcFzIaTTjqp\nli5d2nUZkjSvPPLII/9QVUsO1e6oDI6lS5cyPj7edRmSNK8keWqQdu6qkiQ1YnBIkhoxOCRJjRyV\nxziaemrXbm57cDv3bN7J7pf2sOj4ES5efgpXrTiLM05c1HV5knRw27bBjTfChg3w/POweDGsXQvr\n18PZZ7feXY7G53GMjY3VoAfHH9jyLFdveJTJvfvYs+/Vr8XIgjC6cAG3rD2PC99y8myVKklH5r77\n4JJLYHKy9/GK0dHex8aNsGrVQG+V5JGqGjtUu053VSX5VJJnk3znANuT5I+SbE3yWJLz2uz/qV27\nuXrDo7w4ufc1oQGwZ1/x4uRert7wKE/t2t1mt5LUjm3beqHxwguvDQ3oLb/wQm/7tm2tdtv1MY47\ngJUH2b4KOKf/sQ74kzY7v+3B7Uzu3XfQNpN793H7g0+22a0ktePGG/cPjOkmJ+Gmm1rtttPgqKqv\nAT88SJM1wGeq5yHgjUl+tq3+79m8c7+ZxnR79hVf2PxMW11KUns2bBgsOO68s9Vuu55xHMqpwNNT\nlnf01+0nybok40nGJyYmBnrz3S/tGazdy4O1k6Shev75dtsNaK4HR2ZYN+MUoapuraqxqhpbsuSQ\nV8wDsOj4wU4qW3ScJ59JmoMWL2633YDmenDsAE6fsnwasLOtN794+SmMLJgpm141siB8YPmMkxxJ\n6tbatb0zpw5mdBQuv7zVbud6cGwCfrF/dtUFwHNV9YO23vyqFWcxuvDgX4LRhQv40Ioz2+pSktqz\n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\nNr2ysaqeq6qTqmppVS0FHgJWV9V4N+VKkjoNjqraA1wD3E/vcbR3V9XjSW5IsrrL2iRJMxv4meOz\npX9r9nunrfvYAdq+axg1SZIOrOtdVZKkecbgkCQ1YnBIkhoxOCRJjRgckqRGDA5JUiMGhySpEYND\nktSIwSFJasTgkCQ1YnBIkhoxOCRJjRgckqRGDA5JUiMGhySpEYNDktSIwSFJasTgkCQ1YnBIkhox\nOCRJjRgckqRGDA5JUiMGhySpEYNDktSIwSFJasTgkCQ1YnBIkhoxOCRJjRgckqRGDA5JUiMGhySp\nkc6DI8nKJFuSbE1y/Qzbr0vyRJLHknwlyRld1ClJ6uk0OJIsBG4GVgHLgMuSLJvWbDMwVlVvBzYC\nHx9ulZKkqbqecZwPbK2q7VX1MnAXsGZqg6p6oKpe6C8+BJw25BolSVN0HRynAk9PWd7RX3cgVwL3\nzbQhybok40nGJyYmWixRkjRV18GRGdbVjA2TtcAY8ImZtlfVrVU1VlVjS5YsabFESdJUIx33vwM4\nfcryacDO6Y2SvAf4LeCdVfXSkGqTJM2g6xnHw8A5Sc5MchxwKbBpaoMky4E/A1ZX1bMd1ChJmqLT\n4KiqPcA1wP3Ad4G7q+rxJDckWd1v9glgMfCXSf5nkk0HeDtJ0hB0vauKqroXuHfauo9Nef2eoRcl\nSTqgrndVSZLmGYNDktSIwSFJasTgkCQ1YnBIkhoxOCRJjRgckqRGDA5JUiMGhySpEYNDktSIwSFJ\nasTgkCQ1YnBIkhoxOCRJjRgckqRGDA5JUiMGhySpEYNDktSIwSFJasTgkCQ1YnBIkhoxOCRJjRgc\nkqRGDA5JUiMGhySpEYNDktSIwSFJasTgkCQ1YnBIkhoZ6bqAOWHbNrjxRtiwAZ5/HhYvhrVrYf16\nOPvsrquTpIN6atdubntwO/ds3snul/aw6PgRLl5+CletOIszTlzUen+dzziSrEyyJcnWJNfPsP34\nJJ/vb/9WkqWtFnDfffD2t8Ptt8M//iNU9T7ffntv/X33tdqdJLXpgS3PsvKTD3LX3z3N8y/toYDn\nX9rDXX/3NCs/+SAPbHm29T47DY4kC4GbgVXAMuCyJMumNbsS+FFVvRm4CfhPrRWwbRtccgm88AJM\nTr522+Rkb/0ll/TaSdIc89Su3Vy94VFenNzLnn31mm179hUvTu7l6g2P8tSu3a322/WM43xga1Vt\n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\nSJIa+f+xOC2f2XxXTAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2170f6d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = np.array([[0., 0.], [1., 1.], [1.0,0.0], [0.0,1.0]])\n",
    "y = np.array([0, 0, 1, 1])\n",
    "\n",
    "plt.plot(X[y==0,0], X[y==0,1], 'ro', markersize=10)\n",
    "plt.plot(X[y==1,0], X[y==1,1], 'o', markersize=10)\n",
    "\n",
    "plt.xlim(X[:,0].min()-0.05, X[:,0].max()+0.05)\n",
    "plt.ylim(X[:,1].min()-0.05, X[:,1].max()+0.05)\n",
    "\n",
    "plt.xlabel('$x_1$', fontsize=20)\n",
    "plt.ylabel('$x_2$', fontsize=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2-layer neural net for learning XOR"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "W = np.array([[1,1],[1,1]]) # Hidden layer\n",
    "c = np.array([0,-1])\n",
    "\n",
    "w = np.array([1,-2]) # Output layer\n",
    "b = np.array([0,0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\mathbf{h} = \\sigma(\\mathbf{W}^\\top \\mathbf{x} + \\mathbf{c})$$\n",
    "$$\\mathbf{y} = \\sigma(\\mathbf{w}^\\top \\mathbf{x} + \\mathbf{b}),$$\n",
    "<center>where $\\mathbf{W} \\in \\mathbb{R}^{2\\times2}$, $\\mathbf{c} \\in \\mathbb{R}^2$, $\\mathbf{w} \\in \\mathbb{R}^2$, $\\mathbf{b} \\in \\mathbb{R}$.</center>\n",
    "<img src = 'xor-mlp.png' height=10% width=10%>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute hidden layer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'$h_2$')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ngptJVX0NeO2A9gngbX3zXwaOHzDuNQtZnyRpdsZpD0iSdAgxgCRJnTCAJEmdMIAkSZ0wgCRJnTCA\nJEmdMIAkSZ0wgCRJnTCAJEmdMIAkSZ0wgCRJnTCAJEmdMIAkSZ0wgCRJnTCAJEmdMIBma/t2ePvb\n4bnPhWc9q3l++9ubdknS0Ayg2bj+enjJS+Cqq+Cb34Sq5vmqq5r266/vukJJGhtjE0BJ/l2Se5M8\nnaQ3w7hzktyfZFuSy/raT05ye5KtST6W5IhZFbB9O6xdC489Bnv37tu3d2/Tvnate0KSNKSxCSDg\nHuAngM9NNyDJYcD7gXOBU4ELk5zadv82sKGqVgGPAhfP6tXf9779g2eqvXthw4ZZrVaSnqnGJoCq\n6otVdf8Bhp0JbKuqHVX1BHAdsCZJgNcAm9px1wDnz6qAD394uAC69tpZrVaSnqnGJoCGdDzwlb75\nnW3b84GvV9WTU9r3k2R9kokkE7t37/7Xjj17hqtg2HGS9Ay3qAIoyWeS3DPgsWbYVQxoqxna92+s\n2lhVvarqrVix4l87li4droJhx0nSM9zhXRfQr6peN8dV7ARO7Js/AdgFfBV4XpLD272gyfbhveUt\nzdVuMx2GW7IE3vrW2dYsSc9Ii2oPaB7cAaxqr3g7ArgA2FxVBdwCrG3HrQM+Oas1v+tdTcDMZMkS\nuPTS2dYsSc9IYxNASX48yU7gh4G/SnJD2/69ST4F0O7dXALcAHwR+HhV3duu4t3AO5Nsozkn9IFZ\nFfDCF8KmTfDsZ+8fREuWNO2bNjXjJEkHlGbnQIP0er2amJjYt3H79uZS62uvbS44WLq0Oex26aWG\njyQBSbZU1bSf1/zOOANoekl2A/8ww5DlNOeXFivrmxvrO3iLuTawvrk6UH0vqKoVM/QDBtCcJJkY\nJuW7Yn1zY30HbzHXBtY3V/NV39icA5IkHVoMIElSJwygudnYdQEHYH1zY30HbzHXBtY3V/NSn+eA\nJEmdcA9IktQJA2ga091XqK//yPa+Qtva+wyd1Nf3nrb9/iRv6KC2dya5L8ldSW5K8oK+vqeS3Nk+\nNs93bUPWd1GS3X11vK2vb117z6atSdZ1VN+GvtoeSPL1vr5RbL+rkzyc5J5p+pPkD9r670pyRl/f\ngm6/IWr7921NdyW5NckP9fV9Ocnd7babGLT8COp7VZJv9P0b/kpf34zvixHV98t9td3Tvt+ObvtG\nsf1OTHJLki+muf/aOwaMmb/3X1X5mPIADgO2A6cARwBfAE6dMubtwB+20xcAH2unT23HHwmc3K7n\nsBHX9mrg2e30z0/W1s7vWQTb7iLgvw5Y9mhgR/u8rJ1eNur6poz/ReDqUW2/9jV+BDgDuGea/jcC\n19N8ye7LgdtHuP0OVNtZk69Jc1+u2/v6vgws73jbvQr4n3N9XyxUfVPGvgm4ecTb7zjgjHb6u4AH\nBvz+ztv7zz2gwQbeV2jKmDU09xWC5j5Dr02Stv26qnq8qr4EbGvXN7LaquqWqnqsnb2N5stXR2WY\nbTedNwA3VtUjVfUocCNwTsf1XQh8dJ5rmFFVfQ54ZIYha4APVeM2mi/aPY4RbL8D1VZVt7avDaN/\n7w2z7aYzl/ft0GZZXxfvvQer6vPt9DdpvtJs6q1r5u39ZwANNt19hQaOqeY76L5B8x1zwyy70LX1\nu5jmfyuTjkpzv6PbkszupnzzW99Ptrvvm5JMfoP5Qm+7Wb1Ge+jyZODmvuaF3n7DmO5nGMX2m42p\n770CPp1kS5L1HdUE8MNJvpDk+iSntW2LatsleTbNH+8/72se6fZLc1rhdOD2KV3z9v5bVLdjWESG\nuX/QnO89dJCGXn+StwA94Ef7mldW1a4kpwA3J7m7qraPuL6/BD5aVY8n+TmaPcnXDLnsKOqbdAGw\nqaqe6mtb6O03jK7ee0NL8mqaAHplX/Mr2m13DHBjkv/b7hGM0udpviZmT5I3Av8DWMUi2natNwF/\nU1X9e0sj235JltKE33+qqn+Z2j1gkYN6/7kHNNh09xUaOCbJ4cB30+xaD7PsQtdGktcBlwPnVdXj\nk+1Vtat93gF8luZ/OPPpgPVV1df6avpj4KXDLjuK+vpcwJRDICPYfsOY7mcYxfY7oCQvAa4C1lTV\n1ybb+7bdw8AnmN9D00Opqn+pqj3t9KeAJUmWs0i2XZ+Z3nsLuv2SLKEJnz+tqr8YMGT+3n8LeUJr\nXB80e4Y7aA6/TJ6QPG3KmF9g34sQPt5On8a+FyHsYH4vQhimttNpTqiumtK+DDiynV4ObGWeT7QO\nWd9xfdM/DtzWTh8NfKmtc1k7ffSo62vHfT/NSd+Mcvv1vdZJTH8i/cfY9yTw341q+w1R20qa855n\nTWl/DvBdfdO3Aud0sO2+Z/LflOYP+D+223Go98VC19f2T/5n9jmj3n7ttvgQ8HszjJm399+8b9xD\n5UFzpccDNH/IL2/brqDZowA4Cviz9pft74BT+pa9vF3ufuDcDmr7DPAQcGf72Ny2nwXc3f5y3Q1c\n3NG2+y3g3raOW4Af6Fv2P7TbdBvws13U187/KnDllOVGtf0+CjwI7KX5X+XFwM8BP9f2B3h/W//d\nQG9U22+I2q4CHu1770207ae02+0L7b/95R1tu0v63nu30ReUg94Xo66vHXMRzYVM/cuNavu9kuaw\n2V19/4ZvXKj3n9+EIEnqhOeAJEmdMIAkSZ0wgCRJnTCAJEmdMIAkSZ0wgCRJnTCApEUqzW01Ksmb\nu65FWggGkLR4Td5n5fOdViEtED+IKi1SSe6j+Wqb51bV013XI80394CkRSjJc2i+j+5Ow0eHKgNI\nWpxW0/x+fj7JqUk+nOSfk+xpb3X9sq4LlObKAJIWp8lbVLwAmKD5huQPAX8N/DCwOcl3dVSbNC+8\nIZ20OE1egPBy4JXV3iYZIMmfAz9Bs5f0vzuoTZoX7gFJi9NkAF3UHz6tL7bPR42wHmneGUDSIpPk\nKODFwI6qun7AkFPa5+3t+B9JsjnJP7WfG7poRKVKc2IASYvPD9EcHv/0NP1nAN+gueMkwFLgHuAd\nwLcXvDppnngOSFp8Ji9A2DK1o73wYBXwuWo/xFdVnwI+1fZ/cEQ1SnPmHpC0+Eye/9kvgIDTaX5v\nB/VJY8UAkhafM4AnaA6rTTW5d+TX82jsGUDSIpLkCODfAHdV1d4BQ6Y9PCeNGwNIWlx+EFjC9Hs4\nLwX2AFtHVpG0QLwIQVpEqmoLkBn6XzzCcqQFZQBJYy7JUuD72tlnASuTrAYeqap/7K4yaWbejkEa\nc0leBdwyoOuaqrpotNVIwzOAJEmd8CIESVInDCBJUicMIElSJwwgSVInDCBJUicMIElSJwwgSVIn\nDCBJUicMIElSJ/4/EIISzjnrxvgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2170f198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compute hidden layer values\n",
    "h = np.dot(X, W.T) + c\n",
    "\n",
    "# Plot transformed points\n",
    "plt.plot(h[y==0,0], h[y==0,1], 'ro', markersize=10)\n",
    "plt.plot(h[y==1,0], h[y==1,1], 'o', markersize=10)\n",
    "\n",
    "plt.xlim(h[:,0].min()-0.05, h[:,0].max()+0.05)\n",
    "plt.ylim(h[:,1].min()-0.05, h[:,1].max()+0.05)\n",
    "\n",
    "plt.xlabel('$h_1$', fontsize=20)\n",
    "plt.ylabel('$h_2$', fontsize=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Apply activation function / Output Layer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a2247a550>]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nXwbuMrPs4PUg4KbaL1kksbKyMt56663y66598cUXrF27ltatWzNhwgRatWpFmzZtwi5TpNakVQC5\n+w4zu5xYmGQAf3f3xWZ2O1Do7gXA781sGLAD2ABcGCy7wcz+TCzEAG7fNSBBJNVmz57N6NGjWbNm\nDY0aNWLQoEH86U9/4qCDDgJiAwtE6ru0GoadahqGLTVh+/btzJ49m2g0ymmnncbIkSP59NNPueaa\na4hEIpxxxhk0b9487DJFakx9HYYtkhbcneeff778Yp/ffvstWVlZdOvWDYBOnToRjUZDrlIkXAog\nkRqyadMmPvroI4477jjMjJtvvpni4mKGDx9OJBJh4MCBNGnSJOwyReoMBZBINXz33XflezovvfQS\nDRs2pKSkhCZNmlBQUECHDh3IzMwMu0yROkkBJLKfHn30US655BJKS0tp164dY8eOJRKJlAdO586d\nQ65QpG5TAIkkYe3atTz33HNEo1FuvvlmTj31VPr06cPvf/97IpEIxx57LA0apNvX6kTCpQASqcQP\nP/zAQw89RDQa5c0338TdOeqoo9i0aRMAvXr1olevXiFXKZK+NAy7ChqGfeApKiri888/55RTTmHn\nzp20bduWww8/nLy8PCKRCN26ddMVpkX2QsOwRZK0ZMkSotEo0WiUhQsX0rFjRz755BMyMjL4+OOP\nOfTQQ8MuUaRe0kFrOeC4O7v2/K+//nq6d+/OrbfeSrNmzbjvvvuYO3du+V6Owkek9mgPSA4I7s67\n775bvqdTUFBA9+7dGT58OB07dmTkyJG0a9cu7DJFDigKIKnX1q9fz5133smUKVNYvXo1mZmZDBgw\ngG3bYhdM79+/P/379w+5SpEDkwJI6pUdO3Ywd+5cysrKGDRoEAcddBCPP/44J554InfddRdnnnkm\nLVq0CLtMEUEBJPXAtm3bePXVV8nPz2fatGls2LCBE088kUGDBnHwwQezbt06GjVqFHaZIlKBAkjS\n0vbt28tD5ZxzzqGgoIDmzZtz5plnkpeXx+DBg8v7KnxE6iZ9D6gK+h5Q3fL999/z4osvEo1Gefnl\nl1mxYgVt2rThtddeY/PmzQwYMIDGjRuHXabIAU/fA5J6Y8mSJdx444288sorbNu2jcMPP5zRo0ez\nfft2AE466aSQKxSR/aEAkjqnpKSEqVOn0rlzZwYMGEBWVhYLFy7kkksuIRKJ0K9fPzIyMsIuU0Sq\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a21671f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    " # Apply activation function to 'h'\n",
    "h_ = np.maximum(h, 0)\n",
    "\n",
    "# Plot transformed points\n",
    "plt.plot(h_[y==0,0], h_[y==0,1], 'ro', markersize=10)\n",
    "plt.plot(h_[y==1,0], h_[y==1,1], 'o', markersize=10)\n",
    "\n",
    "plt.xlim(h[:,0].min()-0.05, h[:,0].max()+0.05)\n",
    "plt.ylim(h[:,1].min()-0.05, h[:,1].max()+0.05)\n",
    "\n",
    "plt.xlabel('$h_1$', fontsize=20)\n",
    "plt.ylabel('$h_2$', fontsize=20)\n",
    "\n",
    "# Plot output layer hyperplane (i.e. w^T h + b = 0)\n",
    "o = np.array([[-0*w[1]/w[0] - b[0], 0], [-1*w[1]/w[0] - b[0], 1]])\n",
    "plt.plot(o[:,0], o[:,1], 'k--')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Sigmoid + Squared Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'$y=1$')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nVw/lpcbsqfVcd04j804eT71GVUVEho3d7V0sfmETC5etp2ldK+OPruK2y07mylmTKNfpfyIikqam\nsoxb/uFErpzdwJd++SK3/u9LfOvJ1XxwzmSumj2JKaNrki5RAhLMwIWZzSM6D7AU+IG7fy1teSVw\nP9FvZb8JXOXuawtdp0S6e5w3d7fzt+1tvLZtD2u27WbNtj28suUt1m/fe6Dd9HEjuWbOZM49bgxz\npo2mpjKYXU5E0iiHZSDcnb9tb2Pp6haWrt7G0tUttHV00zi2hlveeyLXzJmsa1mIDIKyWIrNjPFH\n89CCM2la18oPlr7O955ew3d/t4YTJhzNhScdw1mNozl1Up3+phS5IP4VaWalwN3A3wMbgOfMbJG7\np/581HVAq7tPN7P5wO3AVYWvdvjp6XHau3rY29nN7n1d7NjbwY62Tnbs7WRnWzTd2tbJll372Lwz\num15ax9dPQevj1JRWsKU0dW8fWIdH5wzhbc31HLyxFqOripP8JWJSH8phyUTd2dPRzebduxlfWsb\n67fvZf32NlZt3sXKjTvZ0dYJwMS6EVw6cyIfOK2B0ybX6ToWIoOkLJZiZWbMmlrPrKn1vLFjL4+u\n2MRjKzdz51Or+faTqykvNWaMP5q3ja2hcexI3jZ2JFNGVzP2qErqayp0ZF8RCGLgAjgDaHb31wDM\n7CHgEg793etLgFvj6Z8Bd5mZeQ6vLrp11z6WvtoCgBN9YfP9DwDHcd+/LHrMgeloYv8yUtY/sDye\nR8r6B9pmmHdgG2nP2ePQ3dNDV7fT1eN09zid3T3xvUfLejxleQ+d3c6+zm72xrd9HSnTnT2H7ZuR\nlWWMO6qS8bVVzGmsZ0JtFeNrR9BQN4LGsTU0jKqmVNepEBnKgshhgKdf3UbLrnbgYHbCwfxMn58+\nw1MeHJKn6asMdJ20l+lZFvVVZ7ZtZ+vC9Nn9qfNw67R39dDR1UN7Vzcd8XRHd3S/r7ObnXs7D9x2\ntHUeMkgNUFlWwvRxI5l30nhOnljLWW8bTeOYGg1WiORGMFkskpSJdSP4+LmNfPzcRna0ddC0rpVn\n127npY1v8dzaVn6xfGOvdUZVlzOqpoKRlWXUVJRRU1lKdXxfXlpCWUkJZaVGWUl8Ky2htMQoLzXK\nSkoosWjwxCz6jWMAzA5MR/MtZTptfjzD4MDfQ4uXF4u66nLePeOYvG0/lIGLicD6lMcbgDnZ2rh7\n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\nIiIiIiIiwfp/OQ0JdET68PYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2241e978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compute loss for values of z in range in -10 to 10\n",
    "z = np.arange(-10, 10, 0.1)\n",
    "sigz = 1/(1+np.exp(-z))\n",
    "sqloss0 = (sigz)**2\n",
    "sqloss1 = (1-sigz)**2\n",
    "\n",
    "_,(ax1,ax2,ax3) = plt.subplots(1,3,figsize=(18,3))\n",
    "\n",
    "ax1.plot(z, sigz)\n",
    "ax1.set_xlabel('$z$', fontsize=20)\n",
    "ax1.set_ylabel('$\\sigma(z)$', fontsize=20)\n",
    "ax1.set_title('Sigmoid', fontsize=20)\n",
    "\n",
    "ax2.plot(z, sqloss0)\n",
    "ax2.set_xlabel('$z$', fontsize=20)\n",
    "ax2.set_ylabel('Squared Loss', fontsize=20)\n",
    "ax2.set_title('$y=0$', fontsize=20)\n",
    "\n",
    "ax3.plot(z, sqloss1)\n",
    "ax3.set_xlabel('$z$', fontsize=20)\n",
    "ax3.set_ylabel('Squared Loss', fontsize=20)\n",
    "ax3.set_title('$y=1$', fontsize=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Sigmoid + Cross-entropy Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 5)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a22352c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compute loss for values of z in range in -5 to 5\n",
    "z = np.arange(-5, 5, 0.1)\n",
    "sigz = 1/(1+np.exp(-z))\n",
    "sqloss0 = -np.log(1-sigz)\n",
    "sqloss1 = -np.log(sigz)\n",
    "\n",
    "_,(ax1,ax2,ax3) = plt.subplots(1,3,figsize=(18,3))\n",
    "\n",
    "ax1.plot(z, sigz)\n",
    "ax1.set_xlabel('$z$', fontsize=20)\n",
    "ax1.set_ylabel('$\\sigma(z)$', fontsize=20)\n",
    "ax1.set_title('Sigmoid', fontsize=20)\n",
    "\n",
    "ax2.plot(z, sqloss0)\n",
    "ax2.set_xlabel('$z$', fontsize=20)\n",
    "ax2.set_ylabel('Cross-entropy Loss', fontsize=20)\n",
    "ax2.set_title('$y=0$', fontsize=20)\n",
    "\n",
    "ax3.plot(z, sqloss1)\n",
    "ax3.set_xlabel('$z$', fontsize=20)\n",
    "ax3.set_ylabel('Cross-entropy Loss', fontsize=20)\n",
    "ax3.set_title('$y=1$', fontsize=20)\n",
    "ax3.set_ylim([0,5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exponential Gain with Depth"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Consider the following feedforward network with $n$ hidden layers:\n",
    "$$\\mathbf{h}_0 = \\mathbf{x}$$\n",
    "$$\\mathbf{h}_i = \\big|\\,\\mathbf{h}_{i-1} - t_i\\,\\big|,~ i = 1, \\ldots, n$$\n",
    "$$\\mathbf{y} = \\mathbf{w}^\\top \\mathbf{h}_n,$$\n",
    "where each $\\mathbf{x}, \\mathbf{h}_0, \\ldots, \\mathbf{h}_n, \\mathbf{w} \\in \\mathbb{R}^2$ and  $t_i = 2^{-i}$. Here each hidden layer can be seen as folding the space of activations into half along both th axes. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dd0b43558ef2436a89f287095aeade23",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<function __main__.plot_nnet>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Function to implement neural net\n",
    "def fold_net(num_hidden, x):\n",
    "    # Compute hidden layers: each layer folds the input along both axes\n",
    "    fold_thresh = 0.5\n",
    "    for i in range(num_hidden):\n",
    "        x = np.abs(x - fold_thresh) # Apply abs activation at threshold\n",
    "        fold_thresh = fold_thresh / 2 # Halve the threshold\n",
    "    \n",
    "    # Final layer is a hyperplane\n",
    "    w = np.array([1,1])\n",
    "    b = -fold_thresh*2\n",
    "    y = np.dot(x, w) + b\n",
    "    \n",
    "    return np.sign(y)\n",
    "\n",
    "# Function to plot neural net decision boundary\n",
    "def plot_nnet(num_hidden):\n",
    "    _,(fig) = plt.subplots(1,1,figsize=(7, 7))\n",
    "    plot_decision_boundary(np.array([[0,0], [1,1]]), None, partial(fold_net,num_hidden),\\\n",
    "                                                   '#hidden layers = ' + str(num_hidden), fig)\n",
    "\n",
    "# Add slider control for #hidden-layers\n",
    "interact(plot_nnet, num_hidden=(0,9))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SVM with RBF kernel for same pattern"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "63472f746d2048b4a2ad3e2d1e15367c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<function __main__.plot_svm>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Function to implement RBF SVM\n",
    "def fold_svm(num_gaussians_per_axis, x):\n",
    "    n = x.shape[0]\n",
    "    sc = np.zeros((n,))\n",
    "    \n",
    "    num_gaussians_per_axis = num_gaussians_per_axis*2\n",
    "                                 \n",
    "    yi = 1\n",
    "    \n",
    "    # Compute: f(x) = \\sum_i y_i K(x_i, x), where K is RBF kernel \\exp(-||x-x_i||^2 / 2\\sigma^2),\n",
    "    #                                       x_i is kernel center, \\sigma is the kernel width parameter\n",
    "    # For n Gaussians per axis, we use centers: [1.0/n, j * 1.0/n], i = 1...n, j = 1...n, \\sigma = 1 / n / 3 \n",
    "    #                                                                   (so that the 3 SD = 1/n -- required radius)\n",
    "    for i in range(0, num_gaussians_per_axis+1):\n",
    "        yj = -1\n",
    "        \n",
    "        for j in range(0, num_gaussians_per_axis+1):\n",
    "            if((i + j) % 2 == 1):\n",
    "                continue\n",
    "                \n",
    "            center = np.array([i * 1.0/num_gaussians_per_axis, j * 1.0/num_gaussians_per_axis]).reshape(1,2)\n",
    "            \n",
    "            if(yi>0):\n",
    "                plt.plot(center[:,0],center[:,1], 'bx')\n",
    "            else:\n",
    "                plt.plot(center[:,0],center[:,1], 'rx')\n",
    "            \n",
    "            dif = x - np.repeat(center, n, axis=0)\n",
    "            pdf = np.exp(-np.sum(dif * dif * num_gaussians_per_axis * num_gaussians_per_axis * 9.0/2.0, axis=1))\n",
    "                        \n",
    "            sc = sc +  pdf * yi \n",
    "            \n",
    "            yj = yj * -1\n",
    "            \n",
    "        yi = yi * -1\n",
    "    \n",
    "    return np.sign(sc)\n",
    "\n",
    "# Function to plot SVM decision boundary\n",
    "def plot_svm(num_gaussians_per_axis):\n",
    "    _,(fig) = plt.subplots(1,1,figsize=(7, 7))\n",
    "    num_gaussians = 2*num_gaussians_per_axis*num_gaussians_per_axis + 2*num_gaussians_per_axis + 1\n",
    "    plot_decision_boundary(np.array([[0,0], [1,1]]), None, partial(fold_svm,num_gaussians_per_axis),\\\n",
    "                                                   '#gaussians = ' + str(num_gaussians), fig)\n",
    "\n",
    "# Add slider control for #gaussians_per_axis\n",
    "interact(plot_svm, num_gaussians_per_axis=(0,10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
